import { DialogFragment } from "~/utils/DialogFragment";

/**
 * 弹窗基类，带弹窗管理器
 */
export abstract class BaseDialog extends DialogFragment {
  private dialogManager = DialogManager.getInstance();

  readonly broadcastReceivers = this.dialogManager.broadcastReceivers;

  private dialogKey: string = "";

  constructor() {
    super();
    this.register();
  }

  private register() {
    const { key } = this.dialogManager.registerDialog(this);
    this.dialogKey = key;
  }

  /**
   * 不要在外部直接调用，否则会失去管理器的功能
   */
  override show() {
    super.show();
  }

  /**
   * 不要在外部直接调用，否则会失去管理器的功能
   */
  override hide() {
    super.hide();
  }

  /**
   * 不要在外部直接调用，否则会失去管理器的功能
   */
  override destroy() {
    super.destroy();
    // 销毁了需要把 key 删除掉
    this.dialogKey = "";
  }

  showDialog() {
    // 没有 key 了,说明是该弹窗被销毁了
    // 重新创建然后显示
    if (!this.dialogKey) {
      this.createDialog();
      this.register();
    }

    this.dialogManager.show(this.dialogKey);
  }

  hideDialog() {
    this.dialogManager.hide(this.dialogKey);
  }

  destroyDialog() {
    this.dialogManager.destroy(this.dialogKey);
  }

  hideAll() {
    this.dialogManager.hideAll();
  }

  destroyAll() {
    this.dialogManager.destroyAll();
  }

  getAllDialog() {
    return this.dialogManager.getDialogCollection();
  }
}
